﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AG3D
{
    class Program
    {
        static void Main(string[] args)
        {

            //HPHPPHHPHPPHPHHPPHPH
            AG3D ag = new AG3D("PPPHHHPHPPPPHPPPPPHHPPPPHHPPHHPPPPPPPPHHPPHPPHHPPPHHPHPHHHPPPPHHHPPPPPPHHPPHPPHPHPPHPPPPPPPHPPHHHPPPPHPPPHHHHHPPPPHHPPPPHHHH", 100);
            ag.generarPoblacionInicial();
            //System.Diagnostics.Debug.WriteLine("Poblacion inicial: ");
            //foreach (List<int[]> k in ag.pueblo)
            //{

            //    System.Diagnostics.Debug.WriteLine(ag.esConsistente(k));

            //}

            //ag.seleccion();
            //System.Diagnostics.Debug.WriteLine("Seleccion: ");

            //foreach (List<int[]> k in ag.pueblo)
            //{

            //    System.Diagnostics.Debug.WriteLine(ag.esConsistente(k));

            //}

            //ag.cruzamiento();
            //System.Diagnostics.Debug.WriteLine("girarHorario: ");

            
            //foreach (List<int[]> k in ag.pueblo)
            //{

            //    System.Diagnostics.Debug.WriteLine(ag.esConsistente(ag.girarHorario(k)));

            //}

            //System.Diagnostics.Debug.WriteLine("girarAntihorario: ");


            //foreach (List<int[]> k in ag.pueblo)
            //{

            //    System.Diagnostics.Debug.WriteLine(ag.esConsistente(ag.girarAntihorario(k)));

            //}



            int cochinilla = 0;

            for (int a = 0; a < 100; a++)
            {
                ag = new AG3D("PPPHHHPHPPPPHPPPPPHHPPPPHHPPHHPPPPPPPPHHPPHPPHHPPPHHPHPHHHPPPPHHHPPPPPPHHPPHPPHPHPPHPPPPPPPHPPHHHPPPPHPPPHHHHHPPPPHHPPPPHHHH", 100);
                ag.generarPoblacionInicial();

                for (int i = 0; i < 50; i++)
                {

                    ag.seleccion();

                    ag.cruzamiento();

                    int l = ag.evaluarCamino3D(ag.mejorSolucion());

                    System.Diagnostics.Debug.WriteLine(l);
                    //if (l == -56)
                    //    System.Environment.Exit(1);


                }

                //foreach (int[] l in ag.mejorSolucion())
                //{
                //    System.Diagnostics.Debug.WriteLine(l[0] + "," + l[1] + "," + l[2]);

                //}
                int m = ag.evaluarCamino3D(ag.mejorSolucion());
                // Console.WriteLine("-----------------------" + m);

                if (m < cochinilla)
                {
                    cochinilla = m;
                }

                //if (cochinilla == -11)
                //    break;



            }

            System.Diagnostics.Debug.WriteLine("EL MEJOR DE LO MEJOR CON HONORES: " + cochinilla);
        }
    }
}
